package xin.zhiyin.服务.实现;


import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import xin.zhiyin.实体.系统菜单Entity;
import xin.zhiyin.仓库.系统.系统菜单Repository;
import xin.zhiyin.服务.系统菜单Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@Service
@Transactional(rollbackFor = Exception.class) /*声明式事务管理*/
public class 系统菜单Service实现 implements 系统菜单Service {

    @Autowired
    private 系统菜单Repository 菜单Dao;

    @Override
    public void 保存(系统菜单Entity 菜单) {
        菜单Dao.save(菜单);
    }

    @Override
    public 系统菜单Entity 根据Id获取系统菜单(Long id) {
        系统菜单Entity m = new 系统菜单Entity();
        Optional<系统菜单Entity> 菜单 = 菜单Dao.findById(id);
        if(菜单.isPresent())
        {
            m = 菜单.get();
        }
        return m;
    }

    @Override
    public List<系统菜单Entity> 获取所有系统菜单() {
        系统菜单Entity 菜单含子菜单 = new 系统菜单Entity();
        List<系统菜单Entity> 总菜单列表 = new ArrayList<系统菜单Entity>();
        List<系统菜单Entity> 含子菜单的总菜单列表 = new ArrayList<系统菜单Entity>();


        总菜单列表 = 菜单Dao.findAll();
        for(int i = 0;i<总菜单列表.size();i++)
        {
            List<系统菜单Entity> 子菜单列表 = new ArrayList<系统菜单Entity>();
            菜单含子菜单 = 总菜单列表.get(i);
            for(int j = 0;j<总菜单列表.size();j++)
            {
                if(总菜单列表.get(j).getParentId() == 菜单含子菜单.getId())
                {
                    子菜单列表.add(总菜单列表.get(j));
                }
            }
            if(子菜单列表.size() > 0 )
            {
                菜单含子菜单.setChildrenMenuList(子菜单列表);
            }
            菜单含子菜单.setChildrenMenuSize(子菜单列表.size());

            含子菜单的总菜单列表.add(菜单含子菜单);
        }
        return 含子菜单的总菜单列表;
    }

    @Override
    @Transactional
    public void 更新(系统菜单Entity meu) {
        系统菜单Entity menu = 菜单Dao.findById(meu.getId()).get();
        BeanUtils.copyProperties(meu, menu);
        菜单Dao.save(menu);
    }

    @Override
    public void 批量删除(List menuList) {

        /* 有子菜单的不能删除，暂时还未实现此功能 */

        菜单Dao.批量删除(menuList);
    }
}
